/**
 * @requires jquery.validate.js
 * @author ZhangHuihua@msn.com
 */
(function($){
	$.validator.addMethod("alphanumeric", function(value, element) {
		return this.optional(element) || /^\w+$/i.test(value);
	}, "Letters, numbers or underscores only please");
	
	$.validator.addMethod("lettersonly", function(value, element) {
		return this.optional(element) || /^[a-z]+$/i.test(value);
	}, "Letters only please"); 
	
	$.validator.addMethod("phone", function(value, element) {
		return this.optional(element) || /^[0-9 \(\)]{7,30}$/.test(value);
	}, "Please specify a valid phone number");
	
	$.validator.addMethod("postcode", function(value, element) {
		return this.optional(element) || /^[0-9 A-Za-z]{5,20}$/.test(value);
	}, "Please specify a valid postcode");
	
	$.validator.addMethod("date", function(value, element) {
		value = value.replace(/\s+/g, "");
		if (String.prototype.parseDate){
			var $input = $(element);
			var pattern = $input.attr('format') || 'yyyy-MM-dd';

			return !$input.val() || $input.val().parseDate(pattern);
		} else {
			return this.optional(element) || value.match(/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/);
		}
	}, "Please enter a valid date.");
	
	$.validator.addClassRules({
		date: {date: true},
		alphanumeric: { alphanumeric: true },
		lettersonly: { lettersonly: true },
		phone: { phone: true },
		postcode: {postcode: true}
	});
	$.validator.setDefaults({errorElement:"span"});
	$.validator.autoCreateRanges = true;

})(jQuery);